package com.rem.designPattern.singleton单例;

/**
 * 单例模式
 * 饿汉式-静态代码块
 * 和静态常量类似
 * 优点：这种写法比较简单，就是在类装载的时候就完成实例化。避免了线程同步问题
 * 缺点：在类装载的时候就完成实例化，没有达到 Lazy Loading 的效果。如果从始至终从未使用过这个实例，则会造成内存的浪费
 * 结论：这种单例模式可用，可能造成内存浪费
 *
 * @author Rem
 * @date 2022-11-13
 */
public class Singleton02 {
    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {
            new Thread(
                    () -> {
                        Singleton02 instance = Singleton02.getInstance();
                        System.out.println(instance.hashCode());
                    }
            ).start();
        }
    }

    /**
     * 构造器私有
     */
    private Singleton02() {
    }

    private static final Singleton02 INSTANCE;

    static {
        INSTANCE = new Singleton02();
    }

    public static Singleton02 getInstance() {
        return INSTANCE;
    }
}